﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Client.Remoting;
using Client.Encriptacion;
using System.Collections;
using Client.Validaciones;

namespace Client
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        Encriptador encriptador;
        Datos datos;

        public MainWindow()
        {
            InitializeComponent();
            this.Loaded += new RoutedEventHandler(MainWindow_Loaded);
        }

        void MainWindow_Loaded(object sender, RoutedEventArgs e)
        {
            int resultado;
            datos = new Datos();
            encriptador = new Encriptador();
            DatosGroupBox.DataContext = datos;
            Cliente cliente = new Cliente();
            //copiamos una referencia a Salida
            IO.salidaReferencia = this.Salida;
           
            //comprobamos la conexion al servidor
            resultado = cliente.Inicializar();
            if (resultado == RemotingErrores.SERVIDOR_NO_ENCONTRADO)
                MessageBox.Show("No se ha podido comprobar la conexión al servidor", 
                    "Error", 
                    MessageBoxButton.OK, 
                    MessageBoxImage.Error);
            
        }

        //evento para el boton encriptar
        private void encriptarButton_Click(object sender, RoutedEventArgs e)
        {
            if (Validator.IsValid(this.DatosGroupBox))
            {
                Salida.Items.Clear();
                string clave = Clave.Text;
                string texto = TextoFuente.Text;
                BitArray textoEncriptado;

                //encriptamos el mensaje
                textoEncriptado = encriptador.Encripta(texto, clave);
                //Salida por pantalla
                Salida.Items.Add("Texto cifrado:\n");
                Salida.Items.Add(IO.BitArrayToString(textoEncriptado, 8));
               
                enviarButton.IsEnabled = true;
                encriptarButton.IsEnabled = false;
            }
            else 
            {
                MessageBox.Show("Uno o más campos no son válidos",
                    "Error", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }

        //evento pata el boton enviar
        private void enviarButton_Click(object sender, RoutedEventArgs e)
        {
            int resultado;
            Cliente cliente = new Cliente();
            //enviamos el texto cifrado
            resultado = cliente.EnviarMensaje(encriptador.textoEncriptado);

            if (resultado == RemotingErrores.SERVIDOR_NO_ENCONTRADO)
            {
                MessageBox.Show("El servidor no responde",
                       "Error",
                       MessageBoxButton.OK,
                       MessageBoxImage.Error);
                Salida.Items.Add("Ocurrió un error en el servidor: El servidor no responde\n");
            }
            else if(resultado == RemotingErrores.EXCEPCION_NO_ESPECIFICADA)
            {
                MessageBox.Show("ocurrió un error al intentar enviar el mensaje",
                       "Error",
                       MessageBoxButton.OK,
                       MessageBoxImage.Error);
                Salida.Items.Add("Ocurrió un error en el servidor\n");
            }

            else
            {
                Salida.Items.Add("Se envió el texto encriptado al servidor...\n");
                enviarButton.IsEnabled = false;
                encriptarButton.IsEnabled = true;
            }
        }
    }
}
